<?php

class ClienteController extends AdminController implements ItemMenu {

	/* (non-PHPdoc)
	 * @see ItemMenu::cadastrar()
	 */
	public function cadastrar() {
		
		if( isset($_POST) && count($_POST) > 0 ){ 
			
			$this->salvar();
		
		}else{
		
			$view = new View("cliente/gerenciar");
			
			$view->set("condominio.id", 
				$this->isAdministrador() ? $this->getParam("condominio_id") : Encryption::encode( $this->auth->getUserData("condominio_id") )
			);
			
			// Identificação
			$view->set("cliente.id", "");
			$view->set("cliente.cliente.id", "0");
			$view->set("cliente.ativo1", "checked");
			$view->set("cliente.nome", "");
			$view->set("cliente.telefone", "");
			$view->set("cliente.data.nascimento", "");
			$view->set("cliente.cpf", "");
			
			// Localização
			$moraNoCondominio = 1; // 0 ou 1
			$view->set("endereco.id", "");
			$view->set("endereco.js.ativo", $moraNoCondominio);
			$view->set("endereco.condominio.ativo".$moraNoCondominio, "checked");
			$view->set("endereco.logradouro", "");
			$view->set("endereco.numero", "");
			$view->set("endereco.complemento", "");
			$view->set("endereco.bairro", "");
			$view->set("endereco.cep", "");
			$view->set("endereco.cidade", "");
			$view->set("endereco.estados.select", 
				HtmlComponent::select("Estado", "small", "endereco_estado", Estados::convertToSelectArray( "RN" ), "select_estado") 
			);
			
			// Unidade
			$view->set("unidade.id", "");
			$view->set("unidade.bloco", "");
			$view->set("unidade.torre", "");
			$view->set("unidade.andar", "");
			$view->set("unidade.apartamento", "");
			$view->set("unidade.cobertura.ativo0", "checked");
			
			// Conta de usuário
			$view->set("usuario.id", "");
			$view->set("usuario.email", "");
			$view->set("usuario.nome", "");
			$view->set("usuario.tipo.permissao", 
				HtmlComponent::select( "Perfil", "small", "usuario_tipo_permissao_id", TipoPermissaoModel::convertToSelectArray() ) 
			);
		
			// Form
			$view->set("form.controller", $this->getController() );
			$view->set("form.action", $this->getAction() );
			$view->set("form.title.action", ucfirst( $this->getAction() ));
				
			$this->template->content = $view;
			
		}
			
	}

	/* (non-PHPdoc)
	 * @see ItemMenu::editar()
	 */
	public function editar() {

	if( isset($_POST) && count($_POST) > 0 ){ 
			
			$this->salvar();
		
		}else{

			// Identificação
			
			$clienteId = $this->isAdministrador() ? $this->getIdFrom() : $this->auth->getUserData("cliente_id");
			
			if( $this->testIsValidId( $clienteId ) && ( $this->isAdministrador() || $clienteId == $this->auth->getUserData("cliente_id") ) ){
			
				$clienteModel = new ClienteModel();
				$cliente = $clienteModel->findById($clienteId);
				
				$view = new View("cliente/gerenciar");
				$view->set("condominio.id", 
					 Encryption::encode( $this->isAdministrador() ? $cliente["condominio_id"] : $this->auth->getUserData("condominio_id") )
				);
				
				$view->set("cliente.id", Encryption::encode($cliente['id']) );
				$view->set("cliente.cliente.id", $cliente['cliente_id'] != 0 ? Encryption::encode($cliente['cliente_id']) : 0 );
				$view->set("cliente.ativo".$cliente['ativo'], "checked");
				$view->set("cliente.nome", $cliente['nome']);
				$view->set("cliente.telefone", Mask::maskNumber($cliente['telefone'], Mask::$TELEFONE));
				$view->set("cliente.data.nascimento", DateUtil::convertDate($cliente['data_nascimento'], DateUtil::$EN_US, DateUtil::$PT_BR));
				$view->set("cliente.cpf", Mask::maskNumber($cliente['cpf'], Mask::$CPF));
				
				// Localização
				
				$enderecoModel = new EnderecoModel();
				$endereco = array();
				if( $cliente['endereco_id'] != 0 ){
					$endereco = $enderecoModel->findById($cliente['endereco_id']);
				}
				
				$moraNoCondominio = ( $cliente['endereco_id'] != 0 ) ? 0 : 1 ; // 0 ou 1
				$view->set("endereco.id", ( $cliente['endereco_id'] != 0 ) ? Encryption::encode($endereco['id']) : "0" );
				$view->set("endereco.js.ativo", $moraNoCondominio);
				$view->set("endereco.condominio.ativo".$moraNoCondominio, "checked");
				$view->set("endereco.logradouro", ( $cliente['endereco_id'] != 0 ) ? $endereco['logradouro'] : "");
				$view->set("endereco.numero", ( $cliente['endereco_id'] != 0 ) ? $endereco['numero'] : "");
				$view->set("endereco.complemento", ( $cliente['endereco_id'] != 0 ) ? $endereco['complemento'] : "");
				$view->set("endereco.bairro", ( $cliente['endereco_id'] != 0 ) ? $endereco['bairro'] : "");
				$view->set("endereco.cep", ( $cliente['endereco_id'] != 0 ) ? Mask::maskNumber($endereco['cep'], Mask::$CEP) : "");
				$view->set("endereco.cidade", ( $cliente['endereco_id'] != 0 ) ? $endereco['cidade'] : "");
				$view->set("endereco.estados.select", 
					HtmlComponent::select("Estado", "small", "endereco_estado", Estados::convertToSelectArray( ( $cliente['endereco_id'] != 0 ) ? $endereco['estado'] : "RN" ), "select_estado") 
				);
				
				// Unidade
				
				$unidadeModel = new UnidadeModel();
				$unidade = $unidadeModel->findById( $cliente['unidade_id'] );
				
				$view->set("unidade.id", Encryption::encode($unidade["id"]) );
				$view->set("unidade.bloco", $unidade["bloco"]);
				$view->set("unidade.torre", $unidade["torre"]);
				$view->set("unidade.andar", $unidade["andar"]);
				$view->set("unidade.apartamento", $unidade["apartamento"]);
				$view->set("unidade.cobertura.ativo".$unidade["cobertura"], "checked");
				
				// Conta de usuário
				
				$usuarioModel = new UsuarioModel();
				$usuario = $usuarioModel->findOne( array( "cliente_id" => $cliente["id"] ) );
				
				$view->set("usuario.id", Encryption::encode($usuario["id"]) );
				$view->set("usuario.email", $usuario["email"]);
				$view->set("usuario.nome", $usuario["nome"]);
				$view->set("usuario.tipo.permissao", 
					HtmlComponent::select( "Perfil", "small", "usuario_tipo_permissao_id", TipoPermissaoModel::convertToSelectArray( $usuario["tipo_permissao_id"] ) ) 
				);
			
				// Form
				$view->set("form.controller", $this->getController() );
				$view->set("form.action", $this->getAction() );
				$view->set("form.title.action", ucfirst( $this->getAction() ));
					
				$this->template->content = $view;
				
			}else{
				
				$this->redirecionaAcessoIdInvalido("Cliente", "cliente");
				
			}
			
		}
		
	}

	/* (non-PHPdoc)
	 * @see ItemMenu::apagar()
	 */
	public function apagar() {
		
		$idParam = $this->getIdFrom();
	
		if( $this->testIsValidId($idParam) ){
		
			$clienteModel = new ClienteModel();
			$cliente = $clienteModel->delete($idParam);
			
			$this->addGrowlMsgs( Messages::get("apagadoComSucesso", array( "{objeto}" => $cliente['nome'] )) );
			$this->redirect->goToUrl("cliente/index/condominio_id/".Encryption::encode($cliente['condominio_id']));
			
		}else{
			
			$this->redirecionaAcessoIdInvalido("Cliente", "cliente");
						
		}
		
	}

	/* (non-PHPdoc)
	 * @see ItemMenu::listar()
	 */
	public function listar() {
		
		$params = array();
		
		if( $this->isAdministrador() ){
			
			if( $this->containsParam("condominio_id") )
				$params["condominio_id"] = $this->getIdFrom("condominio_id");
				
		}else{
			
			$params["condominio_id"] = $this->auth->getUserData("condominio_id");
		
		}
		
		$view = new View("cliente/listar");
		
		if( count($params) == 0 ){
			
			$view->set( "select.condominio", 
				HtmlComponent::select( "Condomínio", "medium", "condominio_id", CondominioModel::convertAllToSelectArray(), "condominio")
			);
			$view->set( "table.results", "");
			$view->set( "panel", "Filtrar");
			
		}else{
			 
			if( array_key_exists("condominio_id", $params) ){
				
				$condominioModel = new CondominioModel();
				$condominio = $condominioModel->findById( $params["condominio_id"] );
				
				$table = new View("_components/jquery_table");
	
				$table->set("table.title", "Clientes de ".$condominio["nome"]);
				$table->set("table.black.icon16", "list");
				$table->set("table.new.label", "Novo Cliente");
				$table->set("table.new.url", 
						"cliente/cadastrar" . 
						"/condominio_id/" . Encryption::encode( $condominio["id"] )
				);
				
				$table->set("table.head", 
					ViewList::merge( "th",
						ClienteModel::createHeadersToTable()
					) 
				);
				
				$table->set("table.body", 
					ViewList::merge( "cliente/tr", 
						ClienteModel::listClientesToTableByCondominio($condominio["id"])
					) 
				);
				
				$view->set( "select.condominio", "");
				$view->set( "table.results", $table->output()); // Criar tabela
				$view->set( "panel", "Listagem");
				
			}else{
				
				$this->redirecionaAcessoIdInvalido("Condomínio", "cliente", true);
			
			}
			
		}
		
		$view->set("controller", $this->getController() );
		$view->set("controllerLabel", ucfirst($this->getController()) );
		$view->set("action", "listar" );
		
		$this->template->content = $view;
		
	}

	/* (non-PHPdoc)
	 * @see ItemMenu::ver()
	 */
	public function ver() {
		$idParam = $this->getIdFrom();
		if( $this->testIsValidId($idParam) ){ 
			echo "aki";
		}else{
			$this->redirect->goToAction("listar");
		}
	}

	private function salvar() {
		
		//print_r($_POST);
		//exit();
		
		$condominio = array();
		$endereco = array();
		$cliente = array();
		$unidade = array();
		$usuario = array();
		
		foreach ( $_POST as $key => $value ){
			$camp = explode("_", $key);
			$type = array_shift( $camp );
			$camp = implode("_", $camp);
			if( $camp != "senha2" ){
				if( $camp == "id" || ( substr( $camp, (strlen($camp)-3) ) == "_id" ) ){
					if( $value != "" )
						${$type}[$camp] = Encryption::decode($value);
				}else{
					if( in_array($camp, array( "cep", "telefone", "cpf", "cnpj" )) )
						${$type}[$camp] = Mask::unMaskNumber($value);
					else if( in_array($camp, array( "data_nascimento" )) )
						${$type}[$camp] = DateUtil::convertDate($value, DateUtil::$PT_BR, DateUtil::$EN_US);
					else if( $camp == "senha" )
						${$type}[$camp] = md5($value);
					else
						${$type}[$camp] = $value;
				}
			}
		}
		
		if( count($condominio) == 1 && array_key_exists("id", $condominio) ){
		
			$enderecoModel = new EnderecoModel();
			$clienteModel = new ClienteModel();
			$unidadeModel = new UnidadeModel();
			$usuarioModel = new UsuarioModel();
		
			// Ok - Endereco
			if( ArrayUtil::remove_key($endereco, "no_condominio") == 1 ){
				if( isset($endereco['id']) ){
					// delete - mudou-se para o condominio
					$endereco = $enderecoModel->delete($endereco['id'], true);
				}
					//$condominioModel = new CondominioModel();
					//$condominio = $condominioModel->findById( $condominio['id'] );
					//$endereco['id'] = $condominio['endereco_id'];
				$endereco['id'] = 0; // Mora no Condomínio 
			}else{
				$endereco = $enderecoModel->save($endereco);
			}
			//*/
			
			// Ok - Unidade
			$unidade['condominio_id'] = $condominio['id'];
			$unidade = $unidadeModel->save($unidade);
			//*/
			
			// Ok - Cliente
			$cliente['condominio_id'] = $condominio['id'];
			$cliente['endereco_id'] = $endereco['id'];
			$cliente['unidade_id'] = $unidade['id'];
			$cliente['cliente_id'] = $cliente['cliente_id']; // ( ( $cliente['cliente_id'] == 0 ) ? "Titular" : "Dependente" ) 
			$cliente = $clienteModel->save($cliente);
			//*/
			
			// Verifica se é registro novo
			$isNovoModel = !isset($usuario['id']);
	
			// Ok - Usuario
			$usuario['condominio_id'] = $condominio['id'];
			$usuario['cliente_id'] = $cliente['id'];
			$usuario = $usuarioModel->save($usuario);
			//*/
			
			// Define a mensagem do aviso
			$msgKey = $isNovoModel ? "salvoComSucesso" : "alteradoComSucesso";
			$this->addGrowlMsgs( Messages::get( $msgKey, array( "{objeto}" => "'".$cliente['nome']."' (Cliente)")) );
			// Redireciona para index do controller 
			$this->redirect->goToUrl("cliente/index/condominio_id/".Encryption::encode($condominio['id']));
			exit();
			
		}else{
			
			$this->addGrowlMsgs( Messages::get("dadosInvalidos", array( "{objeto}" => "Cliente" )) );
			$this->redirect->goToUrl( "cliente" );
			
		}
		
		/*/
		echo "<br /><br />POST<br />";
		print_r($_POST);
		echo "<br /><br />endereco<br />";
		print_r($endereco);
		echo "<br /><br />condominio<br />";
		print_r($condominio);
		echo "<br /><br />unidade<br />";
		print_r($unidade);
		echo "<br /><br />cliente<br />";
		print_r($cliente);
		echo "<br /><br />usuario<br />";
		print_r($usuario);
		//*/
		
	}
	
}

?>